Edition: 1
Publucation year: 2023
3 Generating the Street Network
4 Applying the 'SandBox' Method
import numpy as np
import math
import pandas as pd
import geopandas as gpd
import networkx as nx
import powerlaw
import shapely.ops as so
import shapely.wkt
import matplotlib.pyplot as plt
from shapely import ops
from shapely.geometry import Point, box, MultiPoint, LineString, Polygon, MultiPolygon, MultiLineString, GeometryCollection
from shapely.strtree import STRtree
from FractalCity import *
np.__version__, pd.__version__, gpd.__version__, nx.__version__, powerlaw.__version__, shapely.__version__
('1.19.5', '1.1.5', '0.7.0', '2.5.1', '1.5', '1.8.4')
data = ReadData('/home/renan/Documentos/Análise de dados/')
df_nodes, df_links = data.read_nodes_and_links('Lavras', 'MG', 'Sudeste')
df_nodes.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 3510 entries, 0 to 3509 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 osmid 3510 non-null int64 1 y 3510 non-null float64 2 x 3510 non-null float64 3 lon 3510 non-null float64 4 lat 3510 non-null float64 5 geometry 3510 non-null object dtypes: float64(4), int64(1), object(1) memory usage: 150.9+ KB
df_nodes.head()
| osmid | y | x | lon | lat | geometry | |
|---|---|---|---|---|---|---|
| 0 | 353501750 | 7.650208e+06 | 499626.949178 | -45.003596 | -21.249785 | POINT (-45.0035955 -21.2497847) |
| 1 | 1431958418 | 7.650181e+06 | 499606.364850 | -45.003794 | -21.250029 | POINT (-45.0037939 -21.2500289) |
| 2 | 1432666855 | 7.650172e+06 | 499627.344245 | -45.003592 | -21.250102 | POINT (-45.0035917 -21.2501023) |
| 3 | 353502592 | 7.649695e+06 | 500488.805280 | -44.995289 | -21.254418 | POINT (-44.9952887 -21.254418) |
| 4 | 3901738964 | 7.649714e+06 | 500355.526301 | -44.996573 | -21.254240 | POINT (-44.9965733 -21.2542403) |
df_links.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 9187 entries, 0 to 9186 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 u 9187 non-null int64 1 v 9187 non-null int64 2 length 9187 non-null float64 3 geometry 9187 non-null object dtypes: float64(1), int64(2), object(1) memory usage: 251.3+ KB
df_links.head()
| u | v | length | geometry | |
|---|---|---|---|---|
| 0 | 353501750 | 1431958418 | 36.585741 | LINESTRING (-45.0035955 -21.2497847, -45.00379... |
| 1 | 353501750 | 1432666855 | 37.936648 | LINESTRING (-45.0035955 -21.2497847, -45.00359... |
| 2 | 1431958418 | 1432666855 | 24.155855 | LINESTRING (-45.0037939 -21.25002890000001, -4... |
| 3 | 1431958418 | 1432666850 | 66.633354 | LINESTRING (-45.0037939 -21.25002890000001, -4... |
| 4 | 1432666855 | 1430927687 | 142.154239 | LINESTRING (-45.0035917 -21.25010230000001, -4... |
sn = StreetNetwork()
#help(sn)
G = sn.generate_network(df_nodes, df_links)
kwargs = {'figsize': (8,8),
'node_size': 0,
'edge_width': 1}
sn.plot_network(G, kwargs)
sn.cyclomatic_number(G)
1616
sn.alpha_number(G)
0.23036350677120457
sn.beta_number(G)
1.46011396011396
sn.gamma_number(G)
0.4869821360699354
sn.network_area(G)/10e6
24.262611687709807
sn.network_perimeter(G)/10e3
5.969933874939586
sb = SandBox()
#help(sb)
lon_red, lat_red, lon_blue, lat_blue, lon_gray, lat_gray = sb.generate_grid(df_nodes)
sb.generate_points(lon_red, lat_red, lon_blue, lat_blue, lon_gray, lat_gray)
Points created!
sb.apply_sandbox_on_street_network(num_div_rmin = 50, num_div_rmax = 2, num_intervals = 50, fraction = 4)
Sandbox method successfully applied!
street_network_data = sb.get_sandbox_data_from_street_network()
lon_p, lat_p = [pos[0] for pos in street_network_data['analized_points']], [pos[1] for pos in street_network_data['analized_points']]
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(lon_gray, lat_gray, 'o', markersize = 1, color='gray', label = 'grid')
ax.plot(lon_blue, lat_blue, 'o', markersize = 2, color='blue', label = 'street network nodes')
ax.plot(lon_red, lat_red, 'o', markersize = 3, color='red', label = 'points found')
ax.plot(lon_p, lat_p, 'o', markersize = 4, color='green', label = 'analized points')
ax.set_xlabel('lon')
ax.set_ylabel('lat')
plt.title('Lavras, MG')
plt.legend()
plt.show()
average = [np.mean([street_network_data['N'][i][j] for i in range(len(street_network_data['N']))]) for j in range(len(street_network_data['N'][0]))]
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(street_network_data['r'], street_network_data['N'], 'o' , fillstyle = 'none')
ax.plot(street_network_data['r'][0], average, 'k-', label = 'average')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$N(r)$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
moment_list = list(np.linspace(-10, 10, 100))
dict_gen_dim = sb.street_network_generalized_dimension(street_network_data, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, dict_gen_dim['gen_dim_street_network'], 's', fillstyle='none', label = 'Generalized Fractal Dimension')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$D_{q}$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
q0_index = moment_list.index(0.10101010101010033)
q1_index = moment_list.index(1.1111111111111107)
q2_index = moment_list.index(2.121212121212121)
D0 = round(dict_gen_dim['gen_dim_street_network'][q0_index],2)
D0_std = round(dict_gen_dim['gen_dim_street_network_std'][q0_index], 2)
D0_r2 = round(dict_gen_dim['gen_dim_street_network_r2'][q0_index],2)
D1 = round(dict_gen_dim['gen_dim_street_network'][q1_index],2)
D1_std = round(dict_gen_dim['gen_dim_street_network_std'][q1_index], 2)
D1_r2 = round(dict_gen_dim['gen_dim_street_network_r2'][q1_index],2)
D2 = round(dict_gen_dim['gen_dim_street_network'][q2_index],2)
D2_std = round(dict_gen_dim['gen_dim_street_network_std'][q2_index], 2)
D2_r2 = round(dict_gen_dim['gen_dim_street_network_r2'][q2_index],2)
print(f'Box-counting: {D0,D0_std,D0_r2}\nInformation: {D1,D1_std,D1_r2}\nCorrelation: {D2,D2_std,D2_r2}', sep='\n')
Box-counting: (1.65, 0.03, 1.0) Information: (1.58, 0.04, 0.99) Correlation: (1.53, 0.06, 0.98)
tau_list = sb.street_network_mass_exponent(dict_gen_dim['gen_dim_street_network'], moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, tau_list, 's', fillstyle='none', color='tab:green', label = 'Mass exponents')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$\tau(q)$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
alpha, falpha = sb.street_network_multifractal_spectrum(tau_list, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(alpha, falpha, 's', fillstyle='none', color = 'tab:orange', label = 'Multifractal spectrum')
ax.set_xlabel(r'$\alpha$')
ax.set_ylabel(r'$f(\alpha)$')
plt.title('Street Network: Lavras, MG')
plt.legend()
plt.show()
pol, popul = data.read_polygons_populations('Lavras', 'MG', 'Sudeste')
population_data = sb.apply_sandbox_on_population(pol, popul, lon_red, lat_red, lon_gray, lat_gray, num_div_rmin = 50, num_div_rmax = 2, num_intervals = 50, fraction = 4)
/home/renan/Documentos/Análise de dados/FractalCity.py:1058: ShapelyDeprecationWarning: STRtree will be changed in 2.0.0 and will not be compatible with versions < 2. tree = STRtree(multipolygon.geoms)
lon_p, lat_p = [pos[0] for pos in population_data['analized_points']], [pos[1] for pos in population_data['analized_points']]
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(lon_gray, lat_gray, 'o', markersize = 1, color='gray', label = 'grid')
ax.plot(lon_blue, lat_blue, 'o', markersize = 2, color='blue', label = 'street network nodes')
ax.plot(lon_red, lat_red, 'o', markersize = 3, color='red', label = 'points found')
ax.plot(lon_p, lat_p, 'o', markersize = 4, color='green', label = 'analized points')
ax.set_xlabel('lon')
ax.set_ylabel('lat')
plt.title('Lavras, MG')
plt.legend()
plt.show()
average = [np.mean([population_data['N'][i][j] for i in range(len(population_data['N']))]) for j in range(len(population_data['N'][0]))]
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(population_data['r'], population_data['N'], 'o' , fillstyle = 'none')
ax.plot(population_data['r'][0], average, 'k-', label = 'average')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$N(r)$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
dict_gen_dim = sb.population_generalized_dimension(population_data, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, dict_gen_dim['gen_dim_population'], 'h', fillstyle='none', label = 'Generalized Dimension')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$D_{q}$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
q0_index = moment_list.index(0.10101010101010033)
q1_index = moment_list.index(1.1111111111111107)
q2_index = moment_list.index(2.121212121212121)
D0 = round(dict_gen_dim['gen_dim_population'][q0_index],2)
D0_std = round(dict_gen_dim['gen_dim_population_std'][q0_index], 2)
D0_r2 = round(dict_gen_dim['gen_dim_population_r2'][q0_index],2)
D1 = round(dict_gen_dim['gen_dim_population'][q1_index],2)
D1_std = round(dict_gen_dim['gen_dim_population_std'][q1_index], 2)
D1_r2 = round(dict_gen_dim['gen_dim_population_r2'][q1_index],2)
D2 = round(dict_gen_dim['gen_dim_population'][q2_index],2)
D2_std = round(dict_gen_dim['gen_dim_population_std'][q2_index], 2)
D2_r2 = round(dict_gen_dim['gen_dim_population_r2'][q2_index],2)
print(f'Box-counting: {D0,D0_std,D0_r2}\nInformation: {D1,D1_std,D1_r2}\nCorrelation: {D2,D2_std,D2_r2}', sep='\n')
Box-counting: (2.79, 0.1, 0.98) Information: (1.95, 0.06, 0.99) Correlation: (1.63, 0.05, 0.99)
tau_list = sb.population_mass_exponent(dict_gen_dim['gen_dim_population'], moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(moment_list, tau_list, 'h', fillstyle='none', color='tab:green', label = 'Mass exponents')
ax.set_xlabel(r'$q$')
ax.set_ylabel(r'$\tau(q)$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
alpha, falpha = sb.population_multifractal_spectrum(tau_list, moment_list)
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(alpha, falpha, 'h', fillstyle='none', color = 'tab:orange', label = 'Multifractal spectrum')
ax.set_xlabel(r'$\alpha$')
ax.set_ylabel(r'$f(\alpha)$')
plt.title('Population: Lavras, MG')
plt.legend()
plt.show()
dict_routes = sn.generate_routes(G)
euclidian_distance = dict_routes['euclidian_distance']
chemical_distance = dict_routes['chemical_distance']
average_euclidian_distance = dict_routes['average_euclidian_distance']
chemical_routes = dict_routes['chemical_routes']
chemical_routes_pos = dict_routes['chemical_routes_pos']
fig, ax = plt.subplots(figsize=(5,5))
ax.plot(average_euclidian_distance, chemical_distance, 'o', fillstyle='none', color = 'tab:blue', label = 'data')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$\ell$')
plt.title('Chem. and Euclid. distance: Lavras, MG')
plt.legend()
plt.show()
fig, ax = plt.subplots(figsize=(5,5))
average_straightness = np.divide(average_euclidian_distance, chemical_distance)
ax.plot(average_euclidian_distance, average_straightness, 'o', fillstyle='none', color = 'tab:blue', label = 'data')
ax.set_xscale('log')
#ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$r/\ell$')
plt.title('Straightness: Lavras, MG')
plt.legend()
plt.show()
fig, ax = plt.subplots(figsize=(5,5))
average_sinuosity = np.divide(chemical_distance, average_euclidian_distance)
ax.plot(average_euclidian_distance, average_sinuosity, 'o', fillstyle='none', color = 'tab:blue', label = 'data')
ax.set_xscale('log')
#ax.set_yscale('log')
ax.set_xlabel(r'$r$')
ax.set_ylabel(r'$\ell / r$')
plt.title('Sinuosity: Lavras, MG')
plt.legend()
plt.show()
psp = PlotStreetPopulation(pol, popul, df_nodes, df_links)
#help(psp)
kwargs = {'legend': True,
'markersize': 2,
'linewidth': 1,
'node_color': 'white',
'edge_color': 'white',
'figsize': (8, 8),
'xlim': (-45.05, -44.95),
'ylim': (-21.29, -21.20),
'xlabel': 'lon',
'ylabel': 'lat',
'legend_kwds': {"label": "Population in 2010", "orientation": "vertical"},
'cmap': 'viridis'}
psp.plot_geo_population_network(kwargs)
/home/renan/.local/lib/python3.6/site-packages/descartes/patch.py:65: ShapelyDeprecationWarning: The array interface is deprecated and will no longer work in Shapely 2.0. Convert the '.coords' to a numpy array instead. for t in polygon]) /home/renan/.local/lib/python3.6/site-packages/geopandas/plotting.py:183: ShapelyDeprecationWarning: The array interface is deprecated and will no longer work in Shapely 2.0. Convert the '.coords' to a numpy array instead. segments = [np.array(linestring)[:, :2] for linestring in geoms]
[1] T. C. Halsey, M. H. Jensen, L. P. Kadanoff, I. Procaccia, and B. I. Shraiman, “Fractal measures and their singularities: The characterization of strange sets,” Phys. Rev. A, vol. 33, pp. 1141–1151, Feb 1986.
[2] T. T ́el, ́Agnes F ̈ul ̈op, and T. Vicsek, “Determination of fractal dimensions for geometrical multifractals,” Physica A: Statistical Mechanics and its Applications, vol. 159, no. 2, pp. 155–166, 1989.
[3] S. Appleby, “Multifractal characterization of the distribution pattern of the human population,” Geographical Analysis, no. 28, pp. 147–160, 1996.
[4] S. G. De Bartolo, R. Gaudio, and S. Gabriele, “Multifractal analysis of river networks: Sandbox approach,” Water Resources Research, vol. 40, no. 2, 2004.
[5] R. Murcio, A. P. Masucci, E. Arcaute, and M. Batty, “Multifractal to monofractal evolution of the london street network,” Phys. Rev. E, vol. 92, p. 062130, Dec 2015.
[6] F. S ́em ́ecurbe, C. Tannier, and S. G. Roux, “Spatial distribution of human population in france: Exploring the modifiable areal unit problem using multifractal analysis,” Geographical Analysis, vol. 48, no. 3, pp. 292–313, 2016.
[7] H. Salat, R. Murcio, and E. Arcaute, “Multifractal methodology,” Physica A: Statistical Mechanics and its Applications, vol. 473, pp. 467–487, 2017.
[8] E. Rosenberg, Fractal Dimensions of Networks. Springer Cham, 1 ed., 2021.
[9] Y. Chen, “Two sets of simple formulae to estimating fractal dimension of irregular boundaries,” Mathematical Problems in Engineering, no. 15, 2020.
[10] E. Strano, F. Simini, and M. De Nadai, “The agglomeration and dispersion dichotomy of human settlements on earth,” Sci Rep, no. 11, p. 23289, 2021.
[11] Z. Song, Y. Chen, and M. Bo, “Multifractal characteristics analysis of spatial state of prefecture-level cities in china.,” Appl. Spatial Analysis, 2023.
[12] K. Falconer, Fractal geometry: mathematical foundations and applications. John Wiley & Sons, 2004.
[13] K. Falconer, Fractals. Oxford University Press, 2013.
[14] H. Zhang, T. Lan, and Z. Li, “Fractal evolution of urban street networks in form and structure: a case study of Hong Kong,” International Journal of Geographical Information Science, vol. 36, no. 6, pp. 1100–1118, 2022.
[15] K. Shirriff, “Chapter 4 - generating fractals from voronoi diagrams,” in Chaos and Fractals (C. A. Pickover, ed.), pp. 23–25, Amsterdam: Elsevier Science, 1998.
[16] A. Bunde and S. Havlin, Fractals and Disordered System. Springer, 1992.
[17] A. Bunde and S. Havlin, Fractals in Science. Springer Berlin, Heidelberg, 1994.
[18] B. Mandelbrot, W. H. Freeman, and Company, The Fractal Geometry of Nature. Einaudi paperbacks, Henry Holt and Company, 1983.
[19] T. Fernandes, J. Filho, and I. Lopes, “Fractal signature of coronaviruses related to severe acute respiratory syndrome,” Research on Biomedical Engineering, vol. 38, 06 2020.
[20] T. Nakayama, K. Yakubo, and R. L. Orbach, “Dynamical properties of fractal networks: Scaling, numerical simulations, and physical realizations,” Rev. Mod. Phys., vol. 66, pp. 381–443, Apr 1994.
[21] B. Moore and L. P. Dasi, “Multi-fractal nature of human left ventricular trabeculae: Possible biomechanical role?,” Chaos, Solitons Fractals, vol. 57, pp. 19–23, 2013.
[22] P. Peebles, “The fractal galaxy distribution,” Physica D: Nonlinear Phenomena, vol. 38, no. 1, pp. 273–278, 1989.
[23] R. I. Abid, A. Tortum, and A. Atalay, “Fractal dimensions of road networks in amman metropolitan districts,” Alexandria Engineering Journal, vol. 60, no. 4, pp. 4203–4212, 2021.
[24] M. F. Barnsley and S. Demko, “Iterated function systems and the global construction of fractals,” Proceedings of the Royal Society of London. Series A, Mathematical and Physical Sciences, vol. 399, no. 1817, pp. 243–275, 1985.
[25] J. Alstott, E. Bullmore, and D. Plenz, “powerlaw: A python package for analysis of heavy-tailed distributions,” PLOS ONE, vol. 9, pp. 1–11, 01 2014.
[26] F. Jahanmiri and D. C. Parker, “An overview of fractal geometry applied to urban planning,” Land, vol. 11, no. 4, 2022.
[27] A. Clauset, C. R. Shalizi, and M. E. J. Newman, “Power-law distributions in empirical data,” SIAM Review, vol. 51, no. 4, pp. 661–703, 2009.
[28] A. Kartun-Giles, M. Barthelemy, and C. Dettmann, “Shape of shortest paths in random spatial networks,” Physical Review E , vol. 100, p. 2315, Sept. 2019.
[29] S. Chatterjee, “The universal relation between scaling exponents in first-passage perco- lation,” Annals of Mathematics, pp. 663–697, 2013.
[30] P. Bonacich, “Power and centrality: A family of measures,” American Journal of Soci- ology, vol. 92, no. 5, p. 1170–82, 1987.
[31] L. da F. Costa, F. A. Rodrigues, G. Travieso, and P. R. V. Boas, “Characterization of complex networks: A survey of measurements,” Advances in Physics, vol. 1, no. 56, pp. 167–242, 2007.
[32] A. S. d. Mata, “Complex Networks: a Mini-review,” Brazilian Journal of Physics, vol. 50, pp. 658–672, Oct. 2020.
[33] M. E. J. Newman, Networks: An Introduction. Oxford University Press, 2010.
[34] A. Sharifi, “Resilient urban forms: A review of literature on streets and street networks,” Building and Environment, vol. 147, pp. 171–187, 2019.
[35] P. Erd ̃os and A. R ́enyi, “On random graphs i.,” Publ. Math., p. 290, December 1959.
[36] D. Watts and S. Strogatz, “Collective dynamics of ‘small-world’ networks.,” Nature, vol. 393, p. 440–442, 1998.
[37] Z. Zhou, J. Yang, Y. Deng, and R. M. Ziff, “Shortest-path fractal dimension for percolation in two and three dimensions,” Phys. Rev. E, vol. 86, p. 061101, Dec 2012.
[38] R. C. Batac and M. T. Cirunay, “Shortest paths along urban road network peripheries,” Physica A: Statistical Mechanics and its Applications, vol. 597, p. 127255, 2022.
[39] A.-L. Barab ́Asi and H. E. Staley, Fractal Concepts in Surface Growth. Cambridge University Press, 1995.
[40] A.-L. Barabasi and R. Albert, “Albert, r.: Emergence of scaling in random networks.,” Science (New York, N.Y.), vol. 286, pp. 509–12, 11 1999.
[41] R. Albert and A.-L. Barab ́asi, “Statistical mechanics of complex networks,” Rev. Mod. Phys., vol. 74, pp. 47–97, Jan 2002.
[42] W. Garrison, “Connectivity of the interstate highway system.,” Papers of the Regional Science Association, p. 121–137, 6 1960.
[43] K. Kansky., “The structure of transportation networks: Relationships between network geography and regional characteristics.,” Chicago: University of Chicago, 1963. Research Paper No. 84., 1963.
[44] P. Haggett and R. Chorley., “Network analysis in geography.,” Arnold, London,, 1972.
[45] C. Ducruet and I. Lugo, “Structure and dynamics of transportation networks: Models, methods, and applications,” 08 2011.
[46] S. Lunag ́omez, S. C. Olhede, and P. J. Wolfe, “Modeling network populations via graph distances,” Journal of the American Statistical Association, vol. 116, no. 536, pp. 2023–2040, 2021.
[47] S. Lmmer, B. Gehlsen, and D. Helbing, “Scaling laws in the spatial structure of urban road networks,” Physica A: Statistical Mechanics and its Applications, vol. 363, no. 1, pp. 89–95, 2006. Information and Material Flows in Complex Networks.
[48] M. Li, R.-R. Liu, L. L ̈u, M.-B. Hu, S. Xu, and Y.-C. Zhang, “Percolation on complex networks: Theory and application,” Physics Reports, vol. 907, pp. 1–68, 2021. Percolation on complex networks: Theory and application.
[49] U. Brandes, S. P. Borgatti, and L. C. Freeman, “Maintaining the duality of closeness and betweenness centrality,” Social Networks, vol. 44, pp. 153–159, 2016.
[50] C. B. Evans, T.S., “Linking the network centrality measures closeness and degree,” Commun Phys, vol. 5, no. 172, 2022.
[51] C. Molinero and S. Thurner, “How the geometry of cities determines urban scaling laws,” Journal of the Royal Society interface, vol. 18, no. 176, p. 20200705, 2021.
[52] F. L. Ribeiro and D. Rybski, “Mathematical models to explain the origin of urban scaling laws,” Physics Reports, vol. 1012, pp. 1–39, 2023.
[53] M. Guo, L. Yang, F. Shen, L. Zhang, A. Li, Y. Cai, and C. Zhou, “Impact of socioeconomic environment and its interaction on the initial spread of COVID-19 in mainland China,” Geospatial Health, vol. 17, Mar. 2022.
[54] E. Arcaute, E. Hatna, P. Ferguson, H. Youn, A. Johansson, and M. Batty, “Constructing cities, deconstructing scaling laws,” Journal of the Royal Society interface, vol. 12, no. 102, 2015.
[55] W. R. Tobler, “A computer movie simulating urban growth in Detroid region,” Econo- mic Geography, vol. 46, pp. 234–240, 1970.
[56] P. H. N. Santos, M. G. Cruz, and W. F. S. Santos, “City science and urban planning: geoprocessing as an instrument for municipal strategic planning,” vol. 6, 2022.
[57] M. Batty, “The size, scale, and shape of cities,” Science (New York, N.Y.), vol. 319, pp. 769–71, 03 2008.
[58] M. Batty, The New Science of Cities. The MIT Press, 2013.
[59] M. Batty, “A theory of city size,” Science, vol. 340, no. 6139, pp. 1418–1419, 2013.
[60] S. G. Ortman, J. Lobo, and M. E. Smith, “Cities: Complexity, theory and history,” PLOS ONE, vol. 15, pp. 1–24, 12 2020.
[61] M. Lee and H. e. a. Barbosa, H.AND Youn, “Morphology of travel routes and the organization of cities.,” Nat Commun, vol. 8, 12 2017.
[62] M. Barthelemy, “The statistical physics of cities,” Nature Reviews Physics, vol. 1, no. 6, pp. 406–415, 2019.
[63] A. F. Siegenfeld and Y. Bar-Yam, “An introduction to complex systems science and its applications,” Complexity, vol. 2020, 2020.
[64] F. L. Ribeiro and W. R. Pereira, “A gentle introduction to scaling laws in biological systems,” arXiv preprint arXiv:2105.01540, 2021.
[65] E. Arcaute and J. J. Ramasco, “Recent advances in urban system science: Models and data,” PLOS ONE, vol. 17, pp. 1–16, 08 2022.
[66] Corral, G. Boleda, and R. Ferrer-i Cancho, “Zipf’s law for word frequencies: Word forms versus lemmas in long texts,” PLOS ONE, vol. 10, pp. 1–23, 07 2015.
[67] K. K. . M. B. Verscharen, D., “The multi-scale nature of the solar wind.,” Living Rev Sol Phys, no. 16, 2019.
[68] A. Johansen, E. Jacquet, J. Cuzzi, A. Morbidelli, and M. Gounelle, “New paradigms for asteroid formation,” Asteroids IV, 05 2015.
[69] F. Caccioli, P. Barucca, and T. Kobayashi, “Network models of financial systemic risk: A review,” Journal of Computational Social Science, vol. 1, 01 2018.
[70] D. A. Minton, C. I. Fassett, M. Hirabayashi, B. A. Howl, and J. E. Richardson, “The equilibrium size-frequency distribution of small craters reveals the effects of distal ejecta on lunar landscape morphology,” Icarus, vol. 326, pp. 63–87, 2019.
[71] D. McKenzie and M. Kennedy, “Power laws reveal phase transitions in landscape con- trols of fire regimes,” Nature communications, vol. 3, p. 726, 03 2012.
[72] ́A. Corral, A. Oss ́o, and J. Llebot, “Scaling of tropical-cyclone dissipation,” Nature Physics, vol. 6, pp. 693–696, Jan. 2010.
[73] S. Tebbens, “Landslide scaling: A review,” Earth and Space Science, vol. 7, 01 2020.
[74] M. Menabde, A. Seed, and G. Pegram, “A simple scaling model for extreme rainfall,” Water Resources Research, vol. 35, pp. 335–339, Jan. 1999.
[75] L. Bettencourt and G. West, “A unified theory of urban living,” Nature, vol. 467, pp. 912–3, 10 2010.
[76] L. M. A. Bettencourt, “The origins of scaling in cities,” Science, vol. 340, no. 6139, pp. 1438–1441, 2013.
[77] F. L. Ribeiro and W. R. L. S. Pereira, “A gentle introduction to scaling relations in biological systems,” Revista Brasileira de Ensino de F ́ısica, vol. 44, no. Rev. Bras. Ensino F ́ıs., 2022 44, p. e20210291, 2022.
[78] Y. Natalia, C. Faes, T. Neyens, P. Chys, N. Hammami, and G. Molenberghs, “Fractal dimension based geographical clustering of covid-19 time series data,” Scientific Reports, vol. 13, 03 2023.
[79] A. Stier, M. Berman, and L. Bettencourt, “Early pandemic covid-19 case growth rates increase with city size,” Urban Sustain, vol. 1, no. 31, 2021.